Skip to content

HJ92 在字符串中找出连续最长的数字串 ​

本节目标:理解“HJ92 在字符串中找出连续最长的数字串”的核心思路,并能把它用于实际开发或面试表达。 中等 通过率:34.08% 时间限制:1秒 空间限制:32M 知识点==字符串====模拟== 描述 输入一个字符串,返回其最长的数字子串,以及其长度。若有多个最长的数字子串,则将它们全部输出(按原字符串的相对位置) 本题含有多组样例输入。

数据范围:字符串长度 1≤�≤200 1≤n≤200 , 保证每组输入都至少含有一个数字 输入描述: 输入一个字符串。1<=len(字符串)<=200 输出描述: 输出字符串中最长的数字字符串和它的长度,中间用逗号间隔。如果有相同长度的串,则要一块儿输出(中间不要输出空格)。 示例1 输入: abcd12345ed125ss123058789a8a72a6a5yy98y65ee1r2 ==复制== 输出: 123058789,9729865,2 ==复制== 说明: 样例一最长的数字子串为123058789,长度为9样例二最长的数字子有72,98,65,长度都为2

要解决这个问题,我们可以使用一个简单的扫描线算法。我们遍历字符串,当遇到数字时,我们就开始计算这个数字子串的长度,直到遇到非数字字符为止。同时,我们需要跟踪当前最长的数字子串的长度,以及对应的子串本身。如果遇到另一个长度相同的数字子串,我们就将其添加到结果列表中。最后,我们输出所有最长的数字子串以及它们的长度。

以下是实现该算法的Python代码: while True: try: s = input() max_length = 0 # 最长数字子串的长度 current_length = 0 # 当前数字子串的长度 current_number = '' # 当前遍历的数字子串 max_numbers = [] # 存储所有最长的数字子串 for char in s: if char.isdigit(): # 如果当前字符是数字 current_number += char # 将当前数字加到当前数字子串 current_length += 1 # 当前数字子串的长度加1 if current_length > max_length: # 如果当前数字子串长度超过了之前的最长长度 max_length = current_length # 更新最长数字子串的长度 max_numbers = [current_number] # 更新最长数字子串列表 elif current_length == max_length: # 如果当前数字子串长度等于最长长度 max_numbers.append(current_number) # 将当前数字子串加入到最长数字子串列表 else: # 如果当前字符不是数字 current_length = 0 # 重置当前数字子串的长度 current_number = '' # 重置当前数字子串 print(''.join(max_numbers) + ',' + str(max_length)) # 输出所有最长的数字子串以及它们的长度 except EOFError: break

这段代码首先读取输入的字符串,然后逐个字符地遍历它。对于每个字符,如果它是数字,则更新当前数字子串和其长度;如果不是数字,则检查当前数字子串是否是最长的,如果是,则更新最长数字子串的记录;如果当前数字子串长度归零。最后,打印出所有最长的数字子串和它们的长度。

import re import sys

def get_longest_num_str(input_str):

使用正则表达式分割字符串,得到所有数字子串的列表 ​

parts = re.split(r'\D+', input_str) max_length = 0 # 用于记录最长数字子串的长度 longest_parts = [] # 用于存储最长的数字子串

遍历所有数字子串 ​

for part in parts: if len(part) > max_length: max_length = len(part) # 更新最长长度 longest_parts = [part] # 重新设置最长数字子串列表 elif len(part) == max_length and max_length != 0:

如果当前字符串长度等于最长长度,则添加到列表中 ​

longest_parts.append(part)

将所有最长的数字子串合并为一个字符串,因为可能有多个相同长度的最长数字子串 ​

result = ''.join(longest_parts)

输出最长的数字子串和它的长度 ​

print(f"{result},{max_length}")

从标准输入读取多行 ​

for line in sys.stdin: get_longest_num_str(line.strip()) # 使用strip去除每行的尾随空白字符

本站总访问 — 次